In [1]:
using Plots
using DataFrames
using CSV
using Statistics
In [2]:
results = CSV.read("results.csv")
Out[2]:
typesizetime
String⍰Int64⍰Float64⍰
1naive16.0e-6
2naive15.0e-6
3naive15.0e-6
4naive15.0e-6
5naive15.0e-6
6naive15.0e-6
7naive15.0e-6
8naive15.0e-6
9naive15.0e-6
10naive15.0e-6
11naive500.000662
12naive500.003173
13naive500.000606
14naive500.001108
15naive500.004608
16naive500.001341
17naive500.001247
18naive500.000633
19naive500.000591
20naive500.000667
21naive1000.017195
22naive1000.023253
23naive1000.017988
24naive1000.026258
25naive1000.038301
26naive1000.016633
27naive1000.019715
28naive1000.03091
29naive1000.027105
30naive1000.02762
In [3]:
df_agg = by(results, [:size, :type]) do subGroup
    DataFrame(AvgTime = mean(subGroup.time), StDev = std(subGroup.time))
end
Out[3]:
sizetypeAvgTimeStDev
Int64⍰String⍰Float64Float64
11naive5.1e-63.16228e-7
250naive0.00146360.00135243
3100naive0.02449780.00693843
4500naive1.934360.37392
51000naive17.53816.66911
61100naive31.26149.36956
71200naive42.89494.26266
81300naive59.992912.5511
91400naive73.480510.1046
101500naive108.30430.9385
111better5.2e-64.21637e-7
1250better0.00175750.00214613
13100better0.0230850.00792847
14500better1.683880.594637
151000better12.57414.89927
161100better17.87548.14766
171200better23.83055.22944
181300better32.71099.22493
191400better40.09626.30127
201500better61.57316.179
211blas5.4e-65.16398e-7
2250blas0.0004610.00101447
23100blas0.0027920.00162572
24500blas0.5551120.164736
251000blas2.903210.684585
261100blas4.32021.64738
271200blas5.187341.21155
281300blas7.735432.07953
291400blas8.246131.91997
301500blas13.99956.34099
In [4]:
sort(df_agg, [:size, :AvgTime])
Out[4]:
sizetypeAvgTimeStDev
Int64⍰String⍰Float64Float64
11naive5.1e-63.16228e-7
21better5.2e-64.21637e-7
31blas5.4e-65.16398e-7
450blas0.0004610.00101447
550naive0.00146360.00135243
650better0.00175750.00214613
7100blas0.0027920.00162572
8100better0.0230850.00792847
9100naive0.02449780.00693843
10500blas0.5551120.164736
11500better1.683880.594637
12500naive1.934360.37392
131000blas2.903210.684585
141000better12.57414.89927
151000naive17.53816.66911
161100blas4.32021.64738
171100better17.87548.14766
181100naive31.26149.36956
191200blas5.187341.21155
201200better23.83055.22944
211200naive42.89494.26266
221300blas7.735432.07953
231300better32.71099.22493
241300naive59.992912.5511
251400blas8.246131.91997
261400better40.09626.30127
271400naive73.480510.1046
281500blas13.99956.34099
291500better61.57316.179
301500naive108.30430.9385
In [5]:
df_agg[:type] .== "naive"
df_naive = df_agg[df_agg[:type] .== "naive", :]
Out[5]:
sizetypeAvgTimeStDev
Int64⍰String⍰Float64Float64
11naive5.1e-63.16228e-7
250naive0.00146360.00135243
3100naive0.02449780.00693843
4500naive1.934360.37392
51000naive17.53816.66911
61100naive31.26149.36956
71200naive42.89494.26266
81300naive59.992912.5511
91400naive73.480510.1046
101500naive108.30430.9385
In [6]:
df_agg[:type] .== "better"
df_better = df_agg[df_agg[:type] .== "better", :]
Out[6]:
sizetypeAvgTimeStDev
Int64⍰String⍰Float64Float64
11better5.2e-64.21637e-7
250better0.00175750.00214613
3100better0.0230850.00792847
4500better1.683880.594637
51000better12.57414.89927
61100better17.87548.14766
71200better23.83055.22944
81300better32.71099.22493
91400better40.09626.30127
101500better61.57316.179
In [9]:
df_agg[:type] .== "blas"
df_lib = df_agg[df_agg[:type] .== "blas", :]
Out[9]:
sizetypeAvgTimeStDev
Int64⍰String⍰Float64Float64
11blas5.4e-65.16398e-7
250blas0.0004610.00101447
3100blas0.0027920.00162572
4500blas0.5551120.164736
51000blas2.903210.684585
61100blas4.32021.64738
71200blas5.187341.21155
81300blas7.735432.07953
91400blas8.246131.91997
101500blas13.99956.34099
In [10]:
plot(df_lib[:size], [df_naive[:AvgTime], df_better[:AvgTime], df_lib[:AvgTime]], label = ["naive", "better", "blas"], size = (1000, 600))
scatter!(df_lib[:size], df_naive[:AvgTime], yerr = df_naive[:StDev], label = "naive")
scatter!(df_lib[:size], df_better[:AvgTime], yerr = df_better[:StDev], label = "better")
scatter!(df_lib[:size], df_lib[:AvgTime], yerr = df_lib[:StDev], label = "blas")
Out[10]:
0 500 1000 1500 0 25 50 75 100 125 naive better blas naive better blas